/* 
  在全局作用域中，带var和不带var的关系？
  区别：带var的可以进行预解释，所以在赋值的前面执行不会报错，不带var的是不能进行
  预解释的，在前面执行会报错
*/

// ------------------------------------------------------------------------

// console.log(num); // undefined
// var num = 12;

// console.log(num2); // ReferenceError: num2 is not defined
// num2 = 12;

// ---------------------------------------------------------------------------
/* 
  关系：num2 = 12; 相当于给window增加了一个叫做num2的属性名，属性值是12
  var num = 12; 首先它相当于给全局作用域增加了一个全局变量num，但是不仅如此，
  它也相当于给window增加了一个属性名num，属性值是12
*/

var num = 12;
console.log(num); // 12

num2 = 12;
console.log(num2); // 12 （window.num2）

// --------------------------------------------------------------------------------------
/* 
  私有作用域中出现了一个变量不是私有的，则往上级作用域进行查找，上级作用域没有
  则继续向上查找，一直找到window为止，如果window下也没有呢？
    我们是获取值：console.log(total);  -> 报错
    我们设置值：total = 100; -> 相当于给window增加了一个属性名total，属性值是100
*/

function fn() {
  // console.log(total); // ReferenceError: total is not defined
  total = 100;
}

fn();
console.log(total);


